// 事件池类型
export interface EventState {
	[propsName: string]: (() => void)[]
}

export class Event {
	// 事件池
	eventState: EventState = {}
	// 绑定事件
	on(type: string, callback: () => void) {
		// 1. 判断该事件是否在事件池存在
		if (this.eventState[type]) {
			// 1.1 存在该事件
			this.eventState[type].push(callback)
		} else {
			// 1.2 不存在该事件
			this.eventState[type] = [callback]
		}
	}
	// 触发事件
	emit(type: string) {
		if (this.eventState[type]) {
			this.eventState[type].forEach(callback => {
				callback()
			})
		} else {
			console.warn(`事件${type}类型不存在, 请先绑定该事件！！！`)
		}
	}
	// 解除事件
	off(type: string) {
		if(this.eventState[type]) {
			delete this.eventState[type]
		} else {
			console.warn(`事件${type}类型不存在, 无法解除该事件绑定！！！`)
		}
	}
}

const ev = new Event()

ev.on('qwe', () => {
	console.log('qwe 事件执行了！！！！！')
})

ev.on('qwe', () => {
	console.log('1234567')
})

ev.on('click', () => {
	console.log('click 执行！！')
})

ev.on('change', () => {
	console.log('change 事件执行了！！！')
})

ev.emit('change')

ev.off('change')

ev.emit('change')

ev.off('change')


